import Vue from "vue";
import VueRouter from "vue-router";
// 导入store
import store from "@/store/index";

// 导入需要的路由模块
import commonRoutes from "./modules/common";
import filmsRoutes from "./modules/films";
import cinemasRoutes from "./modules/cinemas";
import centerRoutes from "./modules/center";
import cityRoutes from "./modules/city";

// 导入vuex的测试组件
import Vuex1 from "@/views/Vuex1";
import Vuex2 from "@/views/Vuex2";

Vue.use(VueRouter);

const routes = [
    // 路由：请求地址与响应资源的对应关系
    // 实现步骤：
    // a. 创建地址对应的组件，组件暂时不考虑布局等因素，输出不同内容即可；
    // b. 导入组件
    // c. 书写路由规则（不拆分）
    // d. 拆分成模块化的形式
    //      通用模块、电影模块、影院模块、城市模块、个人中心模块

    // 展开路由模块的数组，将所有的对象元素放在routes数组中
    ...commonRoutes,

    // 电影模块的路由
    ...filmsRoutes,

    // 电影院模块
    ...cinemasRoutes,

    // 我的模块
    ...centerRoutes,

    // 城市列表
    ...cityRoutes,

    // vuex的测试路由
    {
        path: "/vuex1",
        component: Vuex1,
    },
    {
        path: "/vuex2",
        component: Vuex2,
    },
];

const router = new VueRouter({
    mode: "history",
    base: process.env.BASE_URL,
    routes,
});

// 全局前置路由守卫
// to：去往的路由的对象信息
// from：来源的路由的对象信息
// netx：下一步
router.beforeEach((to, from, next) => {
    // 需要定义一组数据（路由），这组路由可能是需要登录才能访问的（当然也可能是不需要登录就能访问的），当我们获取到目标路由的时候，可以去数组中进行判断，符合特定条件就继续，否则不允许访问。
    // 例如：下面的数组需要登录才能访问
    let needLogin = ["/account", "/order", "/settings"];
    // if (to.path == "/login") {
    //     next();
    // } else {
        if (needLogin.includes(to.path)) {
            // 判断是否有token
            let token = store.state.common._token;
            if (token) {
                // 登录了
                next();
            } else {
                // 没登录，去登录页面
                router.push("/login?goto=" + to.path);
            }
        } else {
            // 继续
            next();
        }
    // }
});

export default router;
